package com.sxj.corejava.code07_面向对象;

/**
 * @author 石小俊
 * 2024年07月15日 10:43
 */
public class Test09_对象的初始化顺序 {

    public static void main(String[] args) {
        System.out.println("**********************对象所在的类被夹在**********************");
        // 静态代码块在类加载时执行
        // 由于每个类只会加载一次,因此,静态代码块只会执行一次
        // 一般用于初始化静态属性
        Product.print();
        System.out.println("**********************对象被创建**********************");
        // 对象被创建时会执行代码块与构造方法
        // 每次创建对象都会执行
        // 代码块一般用于初始化实例属性
        Product product = new Product();
        System.out.println("---------");
        Product product2 = new Product();
        System.out.println("**********************方法被调用**********************");
        product.show();

    }

}

class Product {
    String name;
    static double price;

    static {
        System.out.println("静态代码块");
        Product.price = 5000;
    }

    {
        System.out.println("代码块");
    }

    public Product() {
        System.out.println("无参构造方法");
    }

    public Product(String name) {
        System.out.println("有参构造方法");
        this.name = name;
    }

    public void show() {
        System.out.println("实例方法");
    }

    public static void print() {
        System.out.println("静态方法");
    }
}

